﻿Imports WiremetModel.Entities.Tracking
Imports WiremetModel.Specification.GeneralSpecifications
Imports WiremetModel.Entities
Imports System.Globalization

Public Class frmWysylka2
    'DANE ZLECENIA: wyswietlane sa informacje o zleceniu oraz jego pozycje zlecenia (domyślnie zaznaczona jest pozycja, która została wybrana na kontroli, do mniej wyświetlany jest drut gotowy do wysłki)
    'DANE WYSŁKI: wyswietlana jest lista utworzonych wysyłek do danego zlecenia
    'zaznaczając wysyłkę pokazują się paczki utworzone do danej wysyłki
    'po zaznaczeniu paczki wyświetla się lista drutu, który został w danej paczce wysłany do klienta;
    'Przycisk 'Świadectwo' powoduje wyświetlenie dodatkowych informacji do wysłanego drutu m.in. wytop oraz możliwość wybrania danego drutu do wydruku na świadectwie;
    Private mvarDbHolder As clsDataBase
    Private mvarChanged As Boolean = False
    Private mvarCancel As Boolean = False
    Private mvarWyznSprawdzeniaLiczbyZmiennoprzecinkowej As Boolean
    Private mvarWyznTylkoDoOdczytu As Boolean = False
    Private mvarBlokowanie As clsRecordLock
    Private mvarUzytkownik As clsUzytkownik
    Private mvarTrZlecenie As clsInhTrZlecenie
    Private mvarZlecenie As clsInhZlecenie
    Private mvarWysylkaId As Integer = 0
    Private mvarWysylkaIndeks As Integer
    Private mvarPozycjaZleceniaId As Integer
    Private mvarWagaWyslanegoDrutu As Double = 0
    Private _unitOfWork As UnitOfWork


    Public Sub New(IdZlecenia As Integer, IdPozycjiZlecenia As Integer)

        ' To wywołanie jest wymagane przez projektanta.
        InitializeComponent()

        ' Dodaj inicjację po wywołaniu funkcji InitializeComponent().
        mvarDbHolder = New clsDataBase(VAR_CONNECTION_PARAMETERS, VAR_ERROR_HANDLER)
        mvarUzytkownik = CType(clsUzytkownik.Instance(), clsUzytkownik)
        PobierzFirmyKurierskie()
        mvarTrZlecenie = New clsInhTrZlecenie(IdZlecenia, mvarDbHolder, True)
        mvarZlecenie = New clsInhZlecenie(mvarTrZlecenie.OemId, mvarDbHolder)
        mvarPozycjaZleceniaId = IdPozycjiZlecenia

        If mvarZlecenie.StatusWysylkiID = 3 Then
            WysylkaZakonczona()
        Else
            WysylkaRealizowana()
        End If

        If mvarPozycjaZleceniaId <> 0 Then
            UzupelnijListeDrutuDoWysylki(mvarPozycjaZleceniaId)
        End If

        _unitOfWork = New UnitOfWork()

    End Sub

    Private Sub PobierzFirmyKurierskie()

        Dim lvarDataTable As New DataTable
        lvarDataTable = clsFirmaKurierska.PobierzWszystkieFirmy(mvarDbHolder, VAR_ERROR_HANDLER)
        cmbFirmaKurierska.Items.Clear()
        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                cmbFirmaKurierska.Items.Add(New clsFirmaKurierska(CInt(lvarRow("id")), CStr(IIf(IsDBNull(lvarRow("nazwa")), "", lvarRow("nazwa")))))
            Next
        End If

    End Sub

    Private Sub WyczyscDanePaczkiWysylki()

        txtNumerListuPrzewozowego.Text = String.Empty
        txtWaga.Text = CStr(0)
        cmbFirmaKurierska.SelectedIndex = -1
        txtNumerDrutu.Text = String.Empty
        cmdPaczkiWysylkiUsun.Enabled = False
        cmdPaczkiWysylkiZmien.Enabled = False
        cmdPaczkiWysylkiDodaj.Enabled = True
        grbDanePaczki.Text = "DODANIE NOWEJ PACZKI"

        If dgvInformacje.Rows.Count > 0 Then
            dgvInformacje.Rows.Clear()
        End If
        If dgvPaczkiWysylki.Rows.Count > 0 Then
            dgvPaczkiWysylki.ClearSelection()
        End If
        lblWagaDrutu.Text = CStr(0)
        grbNumerDrutu.Enabled = False
        grbWyslanyDrut.Enabled = False


    End Sub


    Private Sub WysylkaZakonczona()

        lblStatusWysylki.Text = "WYSYŁKA ZAKOŃCZONA"

        grbDlaczego.Visible = True
        lblStatusWysylki.Location = New Point(6, 15)
        grbTylkoDoOdczytu.Size = New Size(200, 40)
        grbTylkoDoOdczytu.Visible = True

        If mvarUzytkownik.Uprawnienia("wysylka") = 10 Or mvarUzytkownik.Uprawnienia("wysylka") = 1 Then
            mvarWyznTylkoDoOdczytu = True
            MessageBox.Show("WYSYŁKA ZAKOŃCZONA - TYLKO DO ODCZYTU", "WIREMET")
            cmdNowaWysylka.Enabled = False
            cmdUsunWysylke.Enabled = False
            cmdZapisz.Enabled = False
            cmdAnuluj.Enabled = False
            cmdZakonczenieWysylki.Enabled = False
            dgvInformacje.Enabled = True
        Else
            mvarBlokowanie = New clsRecordLock(VAR_CONNECTION_PARAMETERS, mvarTrZlecenie.ID, "oem.zlecenie", VAR_ERROR_HANDLER, CInt(mvarUzytkownik.Id))
            mvarWyznTylkoDoOdczytu = False
            If Not mvarBlokowanie.RecordLocked Then
                mvarWyznTylkoDoOdczytu = True
                cmdNowaWysylka.Enabled = False
                cmdUsunWysylke.Enabled = False
                MessageBox.Show("TYLKO DO ODCZYTU", "WIREMET")
                cmdZapisz.Enabled = False
                cmdAnuluj.Enabled = False
                cmdZakonczenieWysylki.Enabled = False
                grbTylkoDoOdczytu.Visible = True
            End If
        End If
        UzupelnijDaneZlecenia()

    End Sub

    Private Sub WysylkaRealizowana()

        If mvarUzytkownik.Uprawnienia("wysylka") = 1 Then
            mvarWyznTylkoDoOdczytu = True
            cmdNowaWysylka.Enabled = False
            cmdUsunWysylke.Enabled = False
            MessageBox.Show("TYLKO DO ODCZYTU", "WIREMET")
            cmdZapisz.Enabled = False
            cmdAnuluj.Enabled = False
            cmdZakonczenieWysylki.Enabled = False
            grbTylkoDoOdczytu.Visible = True
        Else
            mvarBlokowanie = New clsRecordLock(VAR_CONNECTION_PARAMETERS, mvarTrZlecenie.ID, "oem.zlecenie", VAR_ERROR_HANDLER, CInt(mvarUzytkownik.Id))
            If Not mvarBlokowanie.RecordLocked Then
                mvarWyznTylkoDoOdczytu = True
                cmdNowaWysylka.Enabled = False
                cmdUsunWysylke.Enabled = False
                MessageBox.Show("TYLKO DO ODCZYTU", "WIREMET")
                cmdZapisz.Enabled = False
                cmdAnuluj.Enabled = False
                cmdZakonczenieWysylki.Enabled = False
                grbTylkoDoOdczytu.Visible = True
            End If
        End If
        UzupelnijDaneZlecenia()

    End Sub


    Private Sub SprawdzLiczbeZmiennoprzecinkowa(ByVal Liczba1 As String)

        If Liczba1 <> String.Empty And IsNumeric(Liczba1) Then
            If CDbl(Liczba1) >= 0 Then
                mvarWyznSprawdzeniaLiczbyZmiennoprzecinkowej = True
            Else
                mvarWyznSprawdzeniaLiczbyZmiennoprzecinkowej = False
            End If
        Else
            mvarWyznSprawdzeniaLiczbyZmiennoprzecinkowej = False
        End If

    End Sub

    Private Sub UporzadkowanieWysylki()

        'Sprawdzenie czy wszystkie wysyłki mają paczki 
        'czy wszystkie paczki mają drut
        'jesli nie to paczka lub cała wysyłka jest odpowiednio usuwana, 

        Dim lvarWyznUsuniecia As Boolean = False

        For Each lvarRow As DataGridViewRow In dgvWysylki.Rows
            If CType(lvarRow.Tag, clsInhWysylka).PaczkiWysylki.Count > 0 Then
                For Each lvarPaczka As clsInhPaczkiWysylki In CType(lvarRow.Tag, clsInhWysylka).PaczkiWysylki
                    If lvarPaczka.Drut.Count = 0 Then
                        If lvarPaczka.Id <> -1 Then
                            CType(lvarRow.Tag, clsInhWysylka).PaczkiWysylkiDelete.Add(lvarPaczka)
                        End If
                        CType(lvarRow.Tag, clsInhWysylka).PaczkiWysylki.Remove(lvarPaczka)
                        lvarWyznUsuniecia = True
                        Exit For
                    End If
                Next
                If lvarWyznUsuniecia Then
                    Exit For
                End If
            Else
                If CType(lvarRow.Tag, clsInhWysylka).ID <> -1 Then
                    mvarZlecenie.WysylkaDelete.Add(CType(lvarRow.Tag, clsInhWysylka))
                End If
                dgvWysylki.Rows.Remove(lvarRow)
                lvarWyznUsuniecia = True
                Exit For
            End If

            If lvarWyznUsuniecia Then
                Exit For
            End If
        Next
        If lvarWyznUsuniecia Then 'jesli paczka lub wysylka zostala usunieta procedura wykonuje sie jeszcze raz,w celu sparwdzenia wysylki po zmianie
            UporzadkowanieWysylki()
        End If

    End Sub


    Private Sub UzupelnijDaneZlecenia()

        Dim lvarI As Integer

        txtKlient.Text = mvarZlecenie.Klient.NazwaSkrocona
        txtNumerZlecnia.Text = mvarZlecenie.Numer
        txtTerminRealizacji.Text = CDate(mvarZlecenie.Termin).ToShortDateString
        If mvarTrZlecenie.Uwagi <> String.Empty Then
            txtFirmaKurierska.Text = mvarZlecenie.Uwagi
        Else
            txtFirmaKurierska.Text = mvarZlecenie.Klient.Wysylka
        End If

        txtAdresWysylki.Text = "ul." & mvarZlecenie.AdresWysylki.Ulica & " " & mvarZlecenie.AdresWysylki.Numer & vbNewLine & mvarZlecenie.AdresWysylki.KodPocztowy & " " & mvarZlecenie.AdresWysylki.Miejscowosc & ", " & mvarZlecenie.AdresWysylki.Kraj

        'Uzupelnienie pozycji zlecenia
        lvarI = 0
        For Each lvarPozycja As clsInhPozycjaZlecenia In mvarZlecenie.PozycjeZlecenia
            lvarI += 1
            dgvPozycjeZlecenia.Rows.Add(lvarI, String.Empty, lvarPozycja.Id, lvarPozycja.PowierzonyMaterial, lvarPozycja.MaterialOgolnie.NazwaAng, lvarPozycja.Wymiar, lvarPozycja.TolDolna, lvarPozycja.TolGorna, lvarPozycja.Wydluzenie, lvarPozycja.WytrzymaloscMin, lvarPozycja.WytrzymaloscMax, lvarPozycja.Ilosc, lvarPozycja.Jednostka.Jednostka, lvarPozycja.Swiadectwo, lvarPozycja.Pakowaie.Nazwa, lvarPozycja.CenaOpakowania, lvarPozycja.Cena, lvarPozycja.Waluta.Nazwa, lvarPozycja.Uwagi)
            dgvPozycjeZlecenia.Rows(lvarI - 1).Tag = lvarPozycja
        Next
        For Each lvarPozycja As clsInhTrPozycjaZlecenia In mvarTrZlecenie.PozycjeZlecenia
            For Each lvarRow As DataGridViewRow In dgvPozycjeZlecenia.Rows
                If CInt(lvarRow.Cells("colIdPozycji").Value) = lvarPozycja.OemId Then
                    lvarRow.Cells("colIdPozycjiTracking").Value = lvarPozycja.Id
                End If
            Next
        Next
        txtOpisZakonczenia.Text = mvarZlecenie.OpisZakonczenia

        'Uzupelnienie wysylek
        lvarI = 0
        For Each lvarWysylki As clsInhWysylka In mvarZlecenie.Wysylka
            lvarI += 1
            dgvWysylki.Rows.Add(lvarI, lvarWysylki.Numer, lvarWysylki.DataWysylki.ToShortDateString, lvarWysylki.Pracownik.Nazwisko)
            dgvWysylki.Rows(lvarI - 1).Tag = lvarWysylki
        Next

        'Sprawdzenie pozycji zlecenia
        'Dim lvarTmp As Double
        'For Each lvarRow As DataGridViewRow In dgvPozycjeZlecenia.Rows
        '    lvarTmp = WyslanaIlosc(CType(lvarRow.Tag, clsInhPozycjaZlecenia).Id)
        '    If lvarTmp >= CDbl(CType(lvarRow.Tag, clsInhPozycjaZlecenia).Ilosc) Then
        '        dgvPozycjeZlecenia.Rows(lvarRow.Index).DefaultCellStyle.BackColor = Color.LightSteelBlue  'CornflowerBlue
        '    ElseIf lvarTmp <> 0 Then
        '        dgvPozycjeZlecenia.Rows(lvarRow.Index).DefaultCellStyle.BackColor = Color.Lavender 'LightBlue
        '    Else
        '        dgvPozycjeZlecenia.Rows(lvarRow.Index).DefaultCellStyle.BackColor = Color.White
        '    End If
        'Next

    End Sub

    Private Sub UzupelnijWysylki()

        Dim lvarI As Integer
        lvarI = 0
        dgvWysylki.Rows.Clear()
        For Each lvarWysylki As clsInhWysylka In mvarZlecenie.Wysylka
            lvarI += 1
            dgvWysylki.Rows.Add(lvarI, lvarWysylki.Numer, lvarWysylki.DataWysylki.ToShortDateString, lvarWysylki.Pracownik.Nazwisko) 'mvarUzytkownik.mvarNazwisko)
            dgvWysylki.Rows(lvarI - 1).Tag = lvarWysylki
        Next

    End Sub

    Private Sub UzupelnijPaczki()

        Dim lvarI As Integer = 0

        WyczyscDanePaczkiWysylki()
        dgvPaczkiWysylki.Rows.Clear()

        lvarI = 0
        If dgvWysylki.Rows.Count > 0 Then

            For Each lvarPozycja As clsInhPaczkiWysylki In CType(dgvWysylki.SelectedRows(0).Tag, clsInhWysylka).PaczkiWysylki
                lvarI += 1
                If lvarPozycja.Id = -1 Then
                    dgvPaczkiWysylki.Rows.Add(lvarI, Nothing, lvarPozycja.NumerListuPrzewozowego, Format(CDbl(lvarPozycja.Waga), "###0.00"), lvarPozycja.FirmaKurierska)
                    dgvPaczkiWysylki.Rows(lvarI - 1).Tag = lvarPozycja
                Else
                    dgvPaczkiWysylki.Rows.Add(lvarI, lvarPozycja.Id, lvarPozycja.NumerListuPrzewozowego, Format(CDbl(lvarPozycja.Waga), "###0.00"), lvarPozycja.FirmaKurierska)
                    dgvPaczkiWysylki.Rows(lvarI - 1).Tag = lvarPozycja
                End If
            Next

        End If
        If dgvPaczkiWysylki.Rows.Count > 0 Then
            dgvPaczkiWysylki.ClearSelection()
        End If

        If Not mvarWyznTylkoDoOdczytu Then
            grbPaczkiWysylki.Enabled = True
            grbDanePaczki.Enabled = True
        End If

    End Sub

    Private Sub UzupelnijWyslanyDrut()

        Dim lvarI As Integer = 0
        Dim lvarWaga As Double = 0

        dgvInformacje.Rows.Clear()
        lblWagaDrutu.Text = "0"
        lvarI = 0

        If dgvPaczkiWysylki.SelectedRows.Count > 0 Then
            For Each lvarPozycja As clsInhDrutWyslany In CType(dgvPaczkiWysylki.SelectedRows(0).Tag, clsInhPaczkiWysylki).Drut
                lvarI += 1
                dgvInformacje.Rows.Add(lvarI, lvarPozycja.Drut.Id, lvarPozycja.Drut.Kontrola.WymiarMin, lvarPozycja.Drut.Kontrola.WymiarMax, lvarPozycja.Drut.Kontrola.Ilosc, lvarPozycja.Drut.Kontrola.Pakowanie.Nazwa, lvarPozycja.Drut.Kontrola.ZwickUstawienia, lvarPozycja.Drut.Kontrola.ZwickPomiar, lvarPozycja.Drut.Kontrola.ZwickSila, lvarPozycja.Drut.Kontrola.ZwickProcentWydluzenia, lvarPozycja.Drut.Kontrola.ZwickWytrzymalosc)
                dgvInformacje.Rows(lvarI - 1).Tag = lvarPozycja
                lblWagaDrutu.Text = CStr(CDbl(lblWagaDrutu.Text) + CDbl(lvarPozycja.Drut.Kontrola.Ilosc))

                'sparawdzenie czy dana paczka pochodzi z zaznaczonej pozycji zlecenia
                If CInt(dgvPozycjeZlecenia.SelectedRows(0).Cells("colIdPozycjiTracking").Value) = clsTrSzukanie.SzukajIdPozycjiZlecenia(mvarDbHolder, lvarPozycja.Drut.Id.ToString()) Then
                    dgvInformacje.Rows.Item(lvarI - 1).DefaultCellStyle.BackColor = Color.Lavender
                End If

            Next

            If dgvInformacje.Rows.Count > 0 Then
                dgvInformacje.ClearSelection()
            End If
        End If

    End Sub

    Private Sub UzupelnijListeDrutuDoWysylki(IdPozycjiZlecenia As Integer)

        Dim lvarDrut As clsTrSzukanie
        Dim lvarI As Integer
        Dim lvarSumaGotowegoDrutu As Double
        Dim lvarWyznDrutu As Boolean

        lvarDrut = New clsTrSzukanie
        lvarDrut.SzukajDrutuPoKontroli(mvarDbHolder, 4, IdPozycjiZlecenia, 6, 0)

        If lvarDrut.Drut.Count = 0 Then
            MessageBox.Show("Nie ma żadnego drutu po kontroli, który jest gotowy do wysyłki.", "WIREMET")
        Else
            For Each lvarTmp As clsInhTrDrut In lvarDrut.Drut
                'Sprawdzenie czy drut po kontroli został juz dodany do paczki, czy nie oraz czy został usuniety z któreś z paczki
                'w zależności od wartości wyznacznika lvarWyznDrut będzie on dodany do listy bądź nie
                For Each lvarRow As clsInhWysylka In mvarZlecenie.Wysylka
                    For Each lvarPaczka As clsInhPaczkiWysylki In lvarRow.PaczkiWysylki
                        For Each lvarDrutWyslany As clsInhDrutWyslany In lvarPaczka.Drut
                            If lvarDrutWyslany.DrutId = lvarTmp.Id Then
                                lvarWyznDrutu = True
                                Exit For
                            End If
                        Next
                        For Each lvarDrutWyslany As clsInhDrutWyslany In lvarPaczka.DrutDel
                            If lvarDrutWyslany.DrutId = lvarTmp.Id Then
                                lvarWyznDrutu = False
                                Exit For
                            End If
                        Next
                    Next
                    For Each lvarPaczka As clsInhPaczkiWysylki In lvarRow.PaczkiWysylkiDelete
                        For Each lvarDrutWyslany As clsInhDrutWyslany In lvarPaczka.Drut
                            If lvarDrutWyslany.DrutId = lvarTmp.Id Then
                                lvarWyznDrutu = False
                                Exit For
                            End If
                        Next
                        For Each lvarDrutWyslany As clsInhDrutWyslany In lvarPaczka.DrutDel
                            If lvarDrutWyslany.DrutId = lvarTmp.Id Then
                                lvarWyznDrutu = False
                                Exit For
                            End If
                        Next
                    Next
                Next

                For Each lvarRow As clsInhWysylka In mvarZlecenie.WysylkaDelete
                    For Each lvarPaczka As clsInhPaczkiWysylki In lvarRow.PaczkiWysylki
                        For Each lvarDrutWyslany As clsInhDrutWyslany In lvarPaczka.Drut
                            If lvarDrutWyslany.DrutId = lvarTmp.Id Then
                                lvarWyznDrutu = False
                                Exit For
                            End If
                        Next
                        For Each lvarDrutWyslany As clsInhDrutWyslany In lvarPaczka.DrutDel
                            If lvarDrutWyslany.DrutId = lvarTmp.Id Then
                                lvarWyznDrutu = False
                                Exit For
                            End If
                        Next
                    Next
                    For Each lvarPaczka As clsInhPaczkiWysylki In lvarRow.PaczkiWysylkiDelete
                        For Each lvarDrutWyslany As clsInhDrutWyslany In lvarPaczka.Drut
                            If lvarDrutWyslany.DrutId = lvarTmp.Id Then
                                lvarWyznDrutu = False
                                Exit For
                            End If
                        Next
                        For Each lvarDrutWyslany As clsInhDrutWyslany In lvarPaczka.DrutDel
                            If lvarDrutWyslany.DrutId = lvarTmp.Id Then
                                lvarWyznDrutu = False
                                Exit For
                            End If
                        Next
                    Next
                Next

                If Not lvarWyznDrutu Then
                    lvarI += 1
                    dgvListaDoWysylki.Rows.Add(lvarI, lvarTmp.Id, lvarTmp.Kontrola.WymiarMin, lvarTmp.Kontrola.WymiarMax, lvarTmp.Kontrola.Ilosc, lvarTmp.Kontrola.Pakowanie.Nazwa, lvarTmp.Kontrola.ZwickUstawienia.Nazwa, lvarTmp.Kontrola.ZwickPomiar, lvarTmp.Kontrola.ZwickSila, lvarTmp.Kontrola.ZwickProcentWydluzenia, lvarTmp.Kontrola.ZwickWytrzymalosc)
                    dgvListaDoWysylki.Rows(lvarI - 1).Tag = lvarTmp
                    lvarSumaGotowegoDrutu = lvarSumaGotowegoDrutu + CDbl(lvarTmp.Kontrola.Ilosc)
                End If
                lvarWyznDrutu = False
                dgvListaDoWysylki.ClearSelection()
            Next
        End If

        grbListaDoWysylki.Text = "Drut do wysyłki " & lvarSumaGotowegoDrutu & " kg"
    End Sub


    Private Sub ProcesZapisywania()

        Dim lvarTmp As String = String.Empty

        Select Case MsgBox("Czy zapisać wprowadzone zmiany do bazy?", MsgBoxStyle.YesNo, "WIREMET")
            Case MsgBoxResult.No
                mvarChanged = False
                mvarCancel = False
            Case MsgBoxResult.Yes
                Zapisz()
        End Select

    End Sub

    Private Sub Zapisz()

        UporzadkowanieWysylki()

        With mvarZlecenie
            If dgvWysylki.Rows.Count > 0 And mvarZlecenie.StatusWysylkiID <> 3 Then
                .StatusWysylkiID = 2
            ElseIf mvarZlecenie.StatusWysylkiID <> 3 Then
                .StatusWysylkiID = 1
            End If

            .Wysylka.Clear()
            For Each lvarRow As DataGridViewRow In dgvWysylki.Rows
                .Wysylka.Add(CType(lvarRow.Tag, clsInhWysylka))
            Next

            .Save(mvarDbHolder)
        End With

        mvarChanged = False
        mvarCancel = False
        MessageBox.Show("Zapisano do bazy.", "WIREMET")
        UzupelnijWysylki()
        UzupelnijPaczki()

    End Sub

    'POZYCJE WYSYŁKI
    Private Sub dgvPozycjeZlecenia_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvPozycjeZlecenia.CellMouseClick

        If dgvListaDoWysylki.Rows.Count > 0 Then
            dgvListaDoWysylki.Rows.Clear()
        End If
        UzupelnijListeDrutuDoWysylki(CInt(dgvPozycjeZlecenia.SelectedRows(0).Cells("colIdPozycjiTracking").Value))
        UzupelnijWyslanyDrut()

    End Sub

    'WYSYLKA
    Private Sub dgvWysylki_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvWysylki.CellMouseClick
        If dgvWysylki.SelectedRows.Count > 0 Then
            If Not mvarWyznTylkoDoOdczytu Then
                dgvWysylki.Rows.Item(dgvWysylki.CurrentRow.Index).Selected = True
                WyczyscDanePaczkiWysylki()
                grbDanePaczki.Text = String.Empty
            Else 'tylko do odczytu
                grbPaczkiWysylki.Enabled = True
                grbDanePaczki.Enabled = False
                cmdNowaWysylka.Enabled = False
            End If
            mvarWysylkaIndeks = dgvWysylki.SelectedRows(0).Index
            UzupelnijPaczki()
            If dgvWysylki.SelectedRows.Item(0).Index > 2 Then
                dgvWysylki.FirstDisplayedScrollingRowIndex = dgvWysylki.SelectedRows.Item(0).Index - 2
            Else
                dgvWysylki.FirstDisplayedScrollingRowIndex = dgvWysylki.SelectedRows.Item(0).Index
            End If
        Else
            MessageBox.Show("Wybierz wysyłkę do edycji.", "WIREMET")
        End If

    End Sub

    Private Sub cmdNowaWysylka_Click(sender As Object, e As EventArgs) Handles cmdNowaWysylka.Click

        Dim lvarI As Integer
        Dim lvarTmp As String

        Dim lvarFrme As New frmWysylkaData()
        With lvarFrme
            .ShowDialog()
        End With

        If dgvWysylki.Rows.Count > 0 Then
            dgvWysylki.ClearSelection()
        End If

        lvarI = dgvWysylki.Rows.Count
        If dgvWysylki.Rows.Count = 0 Then
            Dim lvarNowaWysylka As New clsInhWysylka()
            With lvarNowaWysylka
                .ID = -1
                .Numer = mvarZlecenie.Numer
                .DataWysylki = CDate(lvarFrme.dtpDataWysylki.Value)
                .PracownikID = mvarUzytkownik.Id
                .Pracownik.Nazwisko = mvarUzytkownik.Nazwisko
            End With
            dgvWysylki.Rows.Add(lvarI + 1, mvarZlecenie.Numer, lvarFrme.dtpDataWysylki.Value.ToShortDateString, mvarUzytkownik.Nazwisko)
            dgvWysylki.Rows(lvarI).Tag = lvarNowaWysylka
            dgvWysylki.Rows(lvarI).Selected = True
            mvarZlecenie.Wysylka.Add(lvarNowaWysylka)
        Else
            lvarTmp = dgvWysylki.Rows(dgvWysylki.Rows.Count - 1).Cells("colWysylkaNumer").Value.ToString()

            If InStr(dgvWysylki.Rows(dgvWysylki.Rows.Count - 1).Cells("colWysylkaNumer").Value.ToString(), "/") = 0 Then
                lvarTmp = "1"
            Else
                lvarTmp = dgvWysylki.Rows(dgvWysylki.Rows.Count - 1).Cells("colWysylkaNumer").Value.ToString().Substring(10, lvarTmp.Length - 10)
            End If

            Dim lvarNowaWysylka As New clsInhWysylka()
            With lvarNowaWysylka
                .ID = -1
                .Numer = mvarZlecenie.Numer & "/" & CStr(CInt(lvarTmp) + 1)
                .DataWysylki = CDate(lvarFrme.dtpDataWysylki.Value.ToShortDateString)
                .PracownikID = mvarUzytkownik.Id
                .Pracownik.Nazwisko = mvarUzytkownik.Nazwisko
            End With
            dgvWysylki.Rows.Add(lvarI + 1, mvarZlecenie.Numer & "/" & CStr(CInt(lvarTmp) + 1), lvarFrme.dtpDataWysylki.Value.ToShortDateString, mvarUzytkownik.Nazwisko)
            dgvWysylki.Rows(lvarI).Tag = lvarNowaWysylka
            dgvWysylki.Rows(lvarI).Selected = True
            mvarZlecenie.Wysylka.Add(lvarNowaWysylka)
        End If

        'przygotowanie formularza
        WyczyscDanePaczkiWysylki()

        grbDanePaczki.Enabled = True

        dgvPaczkiWysylki.Rows.Clear()
        dgvInformacje.Rows.Clear()

        grbPaczkiWysylki.Enabled = True

        'ustawienie widoku dgvWysylki
        If dgvWysylki.Rows.Count > 0 And dgvWysylki.Rows.Item(dgvWysylki.Rows.Count - 1).Index > 2 Then
            dgvWysylki.FirstDisplayedScrollingRowIndex = dgvWysylki.Rows.Item(dgvWysylki.Rows.Count - 1).Index - 1
        Else
            dgvWysylki.FirstDisplayedScrollingRowIndex = dgvWysylki.Rows.Item(dgvWysylki.Rows.Count - 1).Index
        End If

    End Sub

    Private Sub cmdUsunWysylke_Click(sender As Object, e As EventArgs) Handles cmdUsunWysylke.Click

        If dgvWysylki.SelectedRows.Count > 0 Then
            Dim lvarIndexPoczatkowy As Integer
            lvarIndexPoczatkowy = dgvWysylki.SelectedRows(0).Index
            mvarZlecenie.WysylkaDelete.Add(CType(dgvWysylki.SelectedRows(0).Tag, clsInhWysylka))
            mvarChanged = True
            dgvWysylki.Rows.Remove(dgvWysylki.CurrentRow)
            If dgvWysylki.RowCount > 0 Then
                For lvarI As Integer = lvarIndexPoczatkowy To dgvWysylki.Rows.Count - 1
                    dgvWysylki.Rows.Item(lvarI).Cells("colWysylkaLp").Value = CInt(dgvWysylki.Rows.Item(lvarI).Cells("colWysylkaLp").Value) - 1
                Next
            End If
            grbDanePaczki.Enabled = False
            dgvWysylki.ClearSelection()
            WyczyscDanePaczkiWysylki()
            dgvPaczkiWysylki.Rows.Clear()
            dgvListaDoWysylki.Rows.Clear()
            UzupelnijListeDrutuDoWysylki(CInt(dgvPozycjeZlecenia.SelectedRows(0).Cells("colIdPozycjiTracking").Value))
        Else
            MessageBox.Show("Wybierz wysyłkę do usunięcia.", "WIREMET")
        End If

    End Sub

    'PACZKA WYSYLKI
    Private Sub dgvPaczkiWysylki_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvPaczkiWysylki.CellMouseClick

        Dim lvarIndex As Integer

        If mvarWyznTylkoDoOdczytu = False And dgvPaczkiWysylki.SelectedRows.Count > 0 Then
            txtNumerListuPrzewozowego.Text = dgvPaczkiWysylki.SelectedRows.Item(0).Cells("colPaczkaWysylkiNumerListuPrzewozowego").Value.ToString()
            txtWaga.Text = dgvPaczkiWysylki.SelectedRows.Item(0).Cells("colPaczkaWysylkiWaga").Value.ToString()
            lvarIndex = cmbFirmaKurierska.FindString(dgvPaczkiWysylki.SelectedRows.Item(0).Cells("colPaczkaWysylkiFirmaKurierska").Value.ToString)
            cmbFirmaKurierska.SelectedIndex = lvarIndex
            cmdPaczkiWysylkiZmien.Enabled = True
            cmdPaczkiWysylkiUsun.Enabled = True
            grbDanePaczki.Enabled = True
            grbDanePaczki.Text = "EDYCJA PACZKI WYSYŁKI"
            cmdPaczkiWysylkiDodaj.Enabled = False
            grbNumerDrutu.Enabled = True
            grbWyslanyDrut.Enabled = True
            UzupelnijWyslanyDrut()
        ElseIf mvarWyznTylkoDoOdczytu = True Then
            txtNumerListuPrzewozowego.Text = dgvPaczkiWysylki.SelectedRows.Item(0).Cells("colPaczkaWysylkiNumerListuPrzewozowego").Value.ToString()
            txtWaga.Text = dgvPaczkiWysylki.SelectedRows.Item(0).Cells("colPaczkaWysylkiWaga").Value.ToString()
            UzupelnijWyslanyDrut()
        Else
            MessageBox.Show("Wybierz paczkę wysyłki do edycji.", "WIREMET")
        End If
    End Sub

    Private Sub cmdPaczkiWysylkiDodaj_Click(sender As Object, e As EventArgs) Handles cmdPaczkiWysylkiDodaj.Click

        SprawdzLiczbeZmiennoprzecinkowa(txtWaga.Text)

        If Not mvarWyznSprawdzeniaLiczbyZmiennoprzecinkowej Then
            MessageBox.Show("Podaj poprawnie wartość.", "WIEREMET")
            txtWaga.Focus()
        ElseIf cmbFirmaKurierska.SelectedIndex = -1 Then
            MessageBox.Show("Wybierz firmę kurierską.", "WIEREMET")
            cmbFirmaKurierska.Focus()
        Else
            Dim lvarI As Integer
            lvarI = dgvPaczkiWysylki.Rows.Count

            Dim lvarNowaPaczka As New clsInhPaczkiWysylki()
            With lvarNowaPaczka
                .WysylkaId = CType(dgvWysylki.SelectedRows(0).Tag, clsInhWysylka).ID
                .NumerListuPrzewozowego = Trim(txtNumerListuPrzewozowego.Text)
                .Waga = Format(CDbl(Trim(txtWaga.Text)), "###0.00")
                .FirmaKurierskaId = CType(cmbFirmaKurierska.SelectedItem, clsFirmaKurierska).Id
            End With

            dgvPaczkiWysylki.Rows.Add(lvarI + 1, Nothing, Trim(txtNumerListuPrzewozowego.Text), Format(CDbl(Trim(txtWaga.Text)), "###0.00"), CType(cmbFirmaKurierska.SelectedItem, clsFirmaKurierska).Nazwa)
            dgvPaczkiWysylki.Rows(lvarI).Tag = lvarNowaPaczka

            CType(dgvWysylki.Rows(mvarWysylkaIndeks).Tag, clsInhWysylka).PracownikID = mvarUzytkownik.Id
            CType(dgvWysylki.Rows(mvarWysylkaIndeks).Tag, clsInhWysylka).Pracownik.Nazwisko = mvarUzytkownik.Nazwisko
            dgvWysylki.Rows(mvarWysylkaIndeks).Cells("colWysylkaPracownik").Value = mvarUzytkownik.Nazwisko
            CType(dgvWysylki.SelectedRows(0).Tag, clsInhWysylka).PaczkiWysylki.Add(CType(dgvPaczkiWysylki.Rows(lvarI).Tag, clsInhPaczkiWysylki))

            'mvarChanged = True
            WyczyscDanePaczkiWysylki()
            dgvPaczkiWysylki.ClearSelection()
        End If

    End Sub

    Private Sub cmdPaczkiWysylkiZmien_Click(sender As Object, e As EventArgs) Handles cmdPaczkiWysylkiZmien.Click

        SprawdzLiczbeZmiennoprzecinkowa(txtWaga.Text)

        If Not mvarWyznSprawdzeniaLiczbyZmiennoprzecinkowej And cmbFirmaKurierska.SelectedIndex = -1 Then
            MessageBox.Show("Podaj poprawnie wszystkie dane.", "WIEREMET")
            txtWaga.Focus()
        Else
            dgvPaczkiWysylki.SelectedRows.Item(0).Cells("colPaczkaWysylkiWaga").Value = 0

            CType(dgvWysylki.Rows(mvarWysylkaIndeks).Tag, clsInhWysylka).PracownikID = mvarUzytkownik.Id
            CType(dgvWysylki.Rows(mvarWysylkaIndeks).Tag, clsInhWysylka).Pracownik.Nazwisko = mvarUzytkownik.Nazwisko
            dgvWysylki.Rows(mvarWysylkaIndeks).Cells("colWysylkaPracownik").Value = mvarUzytkownik.Nazwisko
            With CType(dgvPaczkiWysylki.SelectedRows.Item(0).Tag, clsInhPaczkiWysylki)
                .NumerListuPrzewozowego = Trim(txtNumerListuPrzewozowego.Text)
                .Waga = Format(CDbl(Trim(txtWaga.Text)), "###0.00")
                .FirmaKurierskaId = CType(cmbFirmaKurierska.SelectedItem, clsFirmaKurierska).Id
            End With
            With dgvPaczkiWysylki.SelectedRows.Item(0)
                .Cells("colPaczkaWysylkiNumerListuPrzewozowego").Value = txtNumerListuPrzewozowego.Text
                .Cells("colPaczkaWysylkiWaga").Value = Format(CDbl(Trim(txtWaga.Text)), "###0.00")
                .Cells("colPaczkaWysylkiFirmaKurierska").Value = CType(cmbFirmaKurierska.SelectedItem, clsFirmaKurierska).Nazwa
            End With


            CType(dgvWysylki.Rows(mvarWysylkaIndeks).Tag, clsInhWysylka).PracownikID = mvarUzytkownik.Id
            CType(dgvWysylki.Rows(mvarWysylkaIndeks).Tag, clsInhWysylka).Pracownik.Nazwisko = mvarUzytkownik.Nazwisko
            dgvWysylki.Rows(mvarWysylkaIndeks).Cells("colWysylkaPracownik").Value = mvarUzytkownik.Nazwisko
            '  CType(dgvWysylki.SelectedRows(0).Tag, clsInhWysylka).PaczkiWysylki.Add(dgvPaczkiWysylki.SelectedRows(0).Tag)



            mvarChanged = True
            WyczyscDanePaczkiWysylki()
            dgvPaczkiWysylki.ClearSelection()
        End If

    End Sub

    Private Sub cmdPaczkiWysylkiUsun_Click(sender As Object, e As EventArgs) Handles cmdPaczkiWysylkiUsun.Click
        Dim lvarIndexPoczatkowy As Integer
        lvarIndexPoczatkowy = dgvPaczkiWysylki.SelectedRows(0).Index

        CType(dgvWysylki.SelectedRows.Item(0).Tag, clsInhWysylka).PaczkiWysylkiDelete.Add(CType(dgvPaczkiWysylki.SelectedRows(0).Tag, clsInhPaczkiWysylki))
        CType(dgvWysylki.SelectedRows.Item(0).Tag, clsInhWysylka).PaczkiWysylki.Remove(CType(dgvPaczkiWysylki.SelectedRows(0).Tag, clsInhPaczkiWysylki))
        CType(dgvWysylki.Rows(mvarWysylkaIndeks).Tag, clsInhWysylka).PracownikID = mvarUzytkownik.Id
        dgvWysylki.Rows(mvarWysylkaIndeks).Cells("colWysylkaPracownik").Value = mvarUzytkownik.Nazwisko

        dgvPaczkiWysylki.Rows.Remove(dgvPaczkiWysylki.SelectedRows(0))
        If dgvPaczkiWysylki.RowCount <> 0 Then
            For lvarI As Integer = lvarIndexPoczatkowy To dgvPaczkiWysylki.Rows.Count - 1
                dgvPaczkiWysylki.Rows.Item(lvarI).Cells("colPaczkaWysylkiLp").Value = CInt(dgvPaczkiWysylki.Rows.Item(lvarI).Cells("colPaczkaWysylkiLp").Value) - 1
            Next
        End If
        mvarChanged = True
        WyczyscDanePaczkiWysylki()
        grbDanePaczki.Enabled = False
        dgvPaczkiWysylki.ClearSelection()
        UzupelnijListeDrutuDoWysylki(CInt(dgvPozycjeZlecenia.SelectedRows(0).Cells("colIdPozycjiTracking").Value))
    End Sub

    Private Sub cmsPaczkiWysylkiWyczysc_Click(sender As Object, e As EventArgs) Handles cmsPaczkiWysylkiWyczysc.Click
        WyczyscDanePaczkiWysylki()
    End Sub

    Private Sub cmdDodaj_Click(sender As Object, e As EventArgs) Handles cmdDodaj.Click
        Dim lvarFrm As New frmFirmaKurierska(0)
        With lvarFrm
            .Location = New Point(600, 500)
            .ShowDialog()
        End With

        PobierzFirmyKurierskie()
    End Sub

    'DRUT
    Private Sub dgvInformacje_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvInformacje.CellMouseClick
        If dgvInformacje.Rows.Count > 0 Then
            If dgvInformacje.SelectedRows.Count > 0 Then
                cmdDrutUsun.Enabled = True
            End If
        End If
    End Sub

    Private Sub ZnajdzNumerDrutu()

        Dim lvarWyzn As Boolean = False

        dgvListaDoWysylki.ClearSelection()
        dgvInformacje.ClearSelection()

        For Each lvarRow As DataGridViewRow In dgvListaDoWysylki.Rows
            If CType(lvarRow.Tag, clsInhTrDrut).Id = CDbl(txtNumerDrutu.Text) Then

                Dim lvarDrutWyslany As clsInhDrutWyslany
                lvarDrutWyslany = New clsInhDrutWyslany
                With lvarDrutWyslany
                    .DrutId = CType(lvarRow.Tag, clsInhTrDrut).Id
                    .Drut.Id = CType(lvarRow.Tag, clsInhTrDrut).Id
                    .Drut.Kontrola.WymiarMin = CType(lvarRow.Tag, clsInhTrDrut).Kontrola.WymiarMin
                    .Drut.Kontrola.WymiarMax = CType(lvarRow.Tag, clsInhTrDrut).Kontrola.WymiarMax
                    .Drut.Kontrola.Ilosc = Format(CDbl(CType(lvarRow.Tag, clsInhTrDrut).Kontrola.Ilosc), "###0.00")
                    .Drut.Kontrola.Pakowanie.Nazwa = CType(lvarRow.Tag, clsInhTrDrut).Pakowanie.Nazwa
                    .Drut.Kontrola.ZwickUstawienia.Nazwa = CType(lvarRow.Tag, clsInhTrDrut).Kontrola.ZwickUstawienia.Nazwa
                    .Drut.Kontrola.ZwickPomiar = CType(lvarRow.Tag, clsInhTrDrut).Kontrola.ZwickPomiar
                    .Drut.Kontrola.ZwickSila = CType(lvarRow.Tag, clsInhTrDrut).Kontrola.ZwickSila
                    .Drut.Kontrola.ZwickProcentWydluzenia = CType(lvarRow.Tag, clsInhTrDrut).Kontrola.ZwickProcentWydluzenia
                    .Drut.Kontrola.ZwickWytrzymalosc = CType(lvarRow.Tag, clsInhTrDrut).Kontrola.ZwickWytrzymalosc
                End With
                dgvInformacje.Rows.Add(dgvInformacje.Rows.Count + 1, CType(lvarRow.Tag, clsInhTrDrut).Id, CType(lvarRow.Tag, clsInhTrDrut).WymiarMin, CType(lvarRow.Tag, clsInhTrDrut).WymiarMax, CType(lvarRow.Tag, clsInhTrDrut).Kontrola.Ilosc, CType(lvarRow.Tag, clsInhTrDrut).Kontrola.Pakowanie.Nazwa, CType(lvarRow.Tag, clsInhTrDrut).Kontrola.ZwickUstawienia.Nazwa, CType(lvarRow.Tag, clsInhTrDrut).Kontrola.ZwickPomiar, CType(lvarRow.Tag, clsInhTrDrut).Kontrola.ZwickSila, CType(lvarRow.Tag, clsInhTrDrut).Kontrola.ZwickProcentWydluzenia, CType(lvarRow.Tag, clsInhTrDrut).Kontrola.ZwickWytrzymalosc)
                dgvInformacje.Rows(dgvInformacje.Rows.Count - 1).Tag = lvarDrutWyslany
                dgvInformacje.Rows.Item(dgvInformacje.Rows.Count - 1).DefaultCellStyle.BackColor = Color.Lavender
                lblWagaDrutu.Text = CStr(CDbl(lblWagaDrutu.Text) + CDbl(CType(lvarRow.Tag, clsInhTrDrut).Kontrola.Ilosc))
                CType(dgvPaczkiWysylki.SelectedRows(0).Tag, clsInhPaczkiWysylki).Drut.Add(lvarDrutWyslany)
                lvarRow.Selected = True
                mvarChanged = True
                lvarWyzn = True
                dgvListaDoWysylki.Rows.Clear()
                UzupelnijListeDrutuDoWysylki(CInt(dgvPozycjeZlecenia.SelectedRows(0).Cells("colIdPozycjiTracking").Value))
                Exit For
            End If
        Next
        If dgvInformacje.SelectedRows.Count <> 0 Then
            For Each lvarRow As DataGridViewRow In dgvInformacje.Rows
                If CType(lvarRow.Tag, clsInhDrutWyslany).DrutId = CInt(txtNumerDrutu.Text) Then
                    lvarRow.Selected = True
                    cmdDrutUsun.Enabled = True
                    Exit For
                End If
            Next

        End If
        If Not lvarWyzn And dgvInformacje.SelectedRows.Count = 0 Then
            MessageBox.Show("Nie ma drutu o takim numerze.", "WIEREMET")
        End If
        txtNumerDrutu.Text = String.Empty
        txtNumerDrutu.Focus()

    End Sub

    Private Sub cmdDrutUsun_Click(sender As Object, e As EventArgs) Handles cmdDrutUsun.Click

        Dim lvarIndexPoczatkowy As Integer

        If dgvInformacje.SelectedRows.Count > 0 Then
            lblWagaDrutu.Text = CStr(CDbl(lblWagaDrutu.Text) - CDbl(dgvInformacje.SelectedRows(0).Cells("colIlosc").Value))
            lvarIndexPoczatkowy = dgvInformacje.CurrentRow.Index
            CType(dgvPaczkiWysylki.SelectedRows(0).Tag, clsInhPaczkiWysylki).DrutDel.Add(CType(dgvInformacje.CurrentRow.Tag, clsInhDrutWyslany))
            CType(dgvPaczkiWysylki.SelectedRows(0).Tag, clsInhPaczkiWysylki).Drut.Remove(CType(dgvInformacje.CurrentRow.Tag, clsInhDrutWyslany))
            dgvInformacje.Rows.Remove(dgvInformacje.CurrentRow)
            For lvarI As Integer = lvarIndexPoczatkowy To dgvInformacje.Rows.Count - 1
                dgvInformacje.Rows.Item(lvarI).Cells("colLp").Value = CInt(dgvInformacje.Rows.Item(lvarI).Cells("colLp").Value) - 1
            Next
            cmdDrutUsun.Enabled = False
            mvarChanged = True
            If dgvListaDoWysylki.Rows.Count > 0 Then
                dgvListaDoWysylki.Rows.Clear()
            End If
            UzupelnijListeDrutuDoWysylki(CInt(dgvPozycjeZlecenia.SelectedRows(0).Cells("colIdPozycjiTracking").Value))
        Else
            MessageBox.Show("Zaznacz drut do usunięcia z paczki", "WIEREMET")
        End If


    End Sub

    'LISTA DRUTU DO WYSYŁKI
    Private Sub txtNumerDrut_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtNumerDrutu.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            If txtNumerDrutu.Text <> String.Empty And IsNumeric(txtNumerDrutu.Text) Then
                ZnajdzNumerDrutu()
            Else
                MessageBox.Show("Podaj numer.", "WIREMET")
            End If
        End If
    End Sub

    'PRZYCISKI
    Private Sub cmdZapisz_Click(sender As Object, e As EventArgs) Handles cmdZapisz.Click
        If mvarChanged Then
            ProcesZapisywania()
        Else
            MessageBox.Show("Nie wprowadzono żadnych zmian.", "WIREMET")
        End If
    End Sub

    Private Sub cmdWydrukSpecyfikacji_Click(sender As Object, e As EventArgs) Handles cmdWydrukSpecyfikacji.Click

        If Not mvarChanged Then
            If dgvInformacje.Rows.Count > 0 Then

                Try

                    Dim lvarKlucz As String
                    lvarKlucz = clsWydrukSpecyfikacji.PobierzKlucz(mvarDbHolder, VAR_ERROR_HANDLER, CInt(dgvPozycjeZlecenia.SelectedRows(0).Cells("colIdPozycji").Value), CType(dgvPaczkiWysylki.SelectedRows(0).Tag, clsInhPaczkiWysylki).Id)

                    Dim specyfikacjaReport As New SpecyfikacjaReport()
                    specyfikacjaReport.SetParameterValue("p_klucz", lvarKlucz)
                    Dim reportPreview As New frmPrintViewer(specyfikacjaReport, False)
                    reportPreview.ShowDialog()

                    lvarKlucz = clsWydrukSchematu.UsunKlucz(mvarDbHolder, VAR_ERROR_HANDLER, lvarKlucz)

                Catch ex As Exception
                    MsgBox(ex.Message)
                End Try
            Else
                MessageBox.Show("Wybierz paczkę.", "WIREMET")
            End If
        Else
            ProcesZapisywania()
        End If

    End Sub


    Private Sub cmdZakonczenieWysylki_Click(sender As Object, e As EventArgs) Handles cmdZakonczenieWysylki.Click
        If Not mvarChanged Then
            Dim lvarFrme As New frmWysylkaZakonczenie(mvarZlecenie.ID)
            With lvarFrme
                .ShowDialog()
            End With

            If lvarFrme.mvarZakonczona Then
                Me.Close()
            End If
        Else
            ProcesZapisywania()
        End If
    End Sub

    Private Sub cmdAnuluj_Click(sender As Object, e As EventArgs) Handles cmdAnuluj.Click
        mvarChanged = False
        Me.Close()
    End Sub

    'ZDARZENIA FORMULARZA
    Private Sub frmWysylka2_Load(sender As Object, e As EventArgs) Handles Me.Load

        If dgvPozycjeZlecenia.Rows.Count > 0 Then
            'zaznaczenie odpowiedniej pozycji zlecenia w dgvPozycjeZlecenia
            For Each lvarRow As DataGridViewRow In dgvPozycjeZlecenia.Rows
                If lvarRow.Cells("colIdPozycjiTracking").Value.ToString() = mvarPozycjaZleceniaId.ToString() Then
                    dgvPozycjeZlecenia.ClearSelection()
                    lvarRow.Selected = True
                    If lvarRow.Index > 1 Then
                        dgvPozycjeZlecenia.FirstDisplayedScrollingRowIndex = lvarRow.Index - 1
                    Else
                        dgvPozycjeZlecenia.FirstDisplayedScrollingRowIndex = 0
                    End If
                End If
            Next
        End If

    End Sub

    Private Sub frmWysylka2_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
        If Not mvarWyznTylkoDoOdczytu Then
            mvarBlokowanie.Unlock()
        End If
        mvarDbHolder.Close()
        _unitOfWork.Dispose()
    End Sub

#Region "KeyPress"

    Private Sub txtNumerListuPrzewozowego_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtNumerListuPrzewozowego.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            txtWaga.Focus()
        End If
    End Sub

    Private Sub txtWaga_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtWaga.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            cmbFirmaKurierska.Focus()
        End If
    End Sub

    Private Sub cmbFirmaKurierska_KeyPress(sender As Object, e As KeyPressEventArgs) Handles cmbFirmaKurierska.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            cmdPaczkiWysylkiDodaj.Focus()
        End If
    End Sub

    Private Sub cmdPaczkiWysylkiDodaj_KeyPress(sender As Object, e As KeyPressEventArgs) Handles cmdPaczkiWysylkiDodaj.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            cmdPaczkiWysylkiZmien.Focus()
        End If
    End Sub

    Private Sub cmdPaczkiWysylkiZmien_KeyPress(sender As Object, e As KeyPressEventArgs) Handles cmdPaczkiWysylkiZmien.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            cmdPaczkiWysylkiUsun.Focus()
        End If
    End Sub

    Private Sub cmdPaczkiWysylkiUsun_KeyPress(sender As Object, e As KeyPressEventArgs) Handles cmdPaczkiWysylkiUsun.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            txtNumerDrutu.Focus()
        End If
    End Sub

#End Region

    Private Sub UzupelnijWytopyDrutu()

        Dim lvarWyznMaterialuProdukcyjnego As Boolean = False
        Dim lvarWyznIlosciDrutRodzic As Boolean = False
        Dim lvarDrut1 As clsInhTrDrut
        Dim lvarMaterialProdukcyjny As clsInhTrMaterialProdukcyjny


        For Each lvarRow As DataGridViewRow In dgvInformacje.Rows

            lvarDrut1 = New clsInhTrDrut(CType(lvarRow.Tag, clsInhDrutWyslany).DrutId, mvarDbHolder)
            Do
                For Each lvarTmp As clsTrRodzic In lvarDrut1.Rodzic
                    If lvarDrut1.Rodzic.Count > 1 Then
                        If Not lvarTmp.WyznMaterialProdukcyjny Then
                            lvarDrut1 = New clsInhTrDrut(lvarTmp.DrutRodzicId, mvarDbHolder)
                        Else
                            lvarWyznMaterialuProdukcyjnego = True
                            lvarMaterialProdukcyjny = New clsInhTrMaterialProdukcyjny(lvarTmp.DrutRodzicId, mvarDbHolder)
                        End If
                        'lvarWyznIlosciDrutRodzic = True
                    Else
                        If Not lvarTmp.WyznMaterialProdukcyjny Then
                            lvarDrut1 = New clsInhTrDrut(lvarTmp.DrutRodzicId, mvarDbHolder)
                        Else
                            lvarWyznMaterialuProdukcyjnego = True
                            lvarMaterialProdukcyjny = New clsInhTrMaterialProdukcyjny(lvarTmp.DrutRodzicId, mvarDbHolder)
                        End If
                    End If
                Next

            Loop Until (lvarWyznMaterialuProdukcyjnego)

            lvarRow.Cells("colWytop").Value = lvarMaterialProdukcyjny.Material.Wytop
            lvarRow.Cells("colWytop").Tag = lvarMaterialProdukcyjny
            If lvarRow.DefaultCellStyle.BackColor <> Color.Lavender Then
                lvarRow.Cells("colWydruk").ReadOnly = True
            End If

        Next


    End Sub

    Private Sub cmdSwiadectwo_Click(sender As Object, e As EventArgs) Handles cmdSwiadectwo.Click
        Try
            If dgvWysylki.SelectedRows.Count = 0 Then
                Throw New Exception("Proszę, wybierz wysyłkę, aby kontynuować.")
            End If

            Dim wysylkaRepository As New Repository(Of OEM.Wysylka)(_unitOfWork)
            Dim wysylkaIdSpec As New IdSpecification(Of OEM.Wysylka)(CType(dgvWysylki.SelectedRows(0).Tag, clsInhWysylka).ID)
            Dim wysylka As OEM.Wysylka = wysylkaRepository.GetEntityMatching(wysylkaIdSpec)

            Dim wireCertificateOrderLineSelectionDialog As New WireCertificateOrderLineSelectionDialog(wysylka, _unitOfWork)
            wireCertificateOrderLineSelectionDialog.ShowDialog()

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try



        'If Not mvarChanged Then
        '    If dgvInformacje.Rows.Count > 0 Then

        '        If Not dgvInformacje.Columns("colWydruk").Visible Then
        '            dgvInformacje.Columns("colWydruk").Visible = True
        '            dgvInformacje.Columns("colWytop").Visible = True
        '            UzupelnijWytopyDrutu()
        '            cmdDrukuj.Visible = True
        '            cmdPokaz.Visible = True
        '            cmdDrutUsun.Visible = False
        '        Else
        '            dgvInformacje.Columns("colWydruk").Visible = False
        '            dgvInformacje.Columns("colWytop").Visible = False
        '            cmdDrukuj.Visible = False
        '            cmdPokaz.Visible = False
        '            cmdDrutUsun.Visible = True
        '        End If

        '    End If
        'Else
        '    ProcesZapisywania()
        'End If


    End Sub

    Private Sub cmdDrukuj_Click(sender As Object, e As EventArgs) Handles cmdDrukuj.Click
        'Try
        '    Dim paczkaWysylkiRepository As New Repository(Of OEM.PaczkaWysylki)(_unitOfWork)
        '    Dim paczkaWysylkiIdSpec As New IdSpecification(Of OEM.PaczkaWysylki)(CType(dgvPaczkiWysylki.SelectedRows(0).Tag, clsInhPaczkiWysylki).Id)
        '    Dim paczkaWysylki As OEM.PaczkaWysylki = paczkaWysylkiRepository.GetEntityMatching(paczkaWysylkiIdSpec)

        '    Dim wagaWybranychPozycji As Double = 0
        '    For Each row As DataGridViewRow In dgvInformacje.Rows
        '        If row.Visible AndAlso row.Cells("colWydruk").Visible AndAlso CType(row.Cells("colWydruk").Value, Boolean) Then
        '            Dim wagaPozycji As Double

        '            If Double.TryParse(row.Cells("colIlosc").Value.ToString(), wagaPozycji) Then
        '                wagaWybranychPozycji += wagaPozycji
        '            End If
        '        End If
        '    Next

        '    Dim gatunekRepository As New Repository(Of OEM.Gatunek)(_unitOfWork)
        '    Dim gatunekIdSpec As New IdSpecification(Of OEM.Gatunek)(CType(dgvPozycjeZlecenia.SelectedRows(0).Tag, clsInhPozycjaZlecenia).GatunekId)
        '    Dim gatunek As OEM.Gatunek = gatunekRepository.GetEntityMatching(gatunekIdSpec)

        '    Dim klientRepository As New Repository(Of OEM.Klient)(_unitOfWork)
        '    Dim klientIdSpec As New IdSpecification(Of OEM.Klient)(mvarZlecenie.KlientID)
        '    Dim klient As OEM.Klient = klientRepository.GetEntityMatching(klientIdSpec)



        '    Dim pakowanieRepository As New Repository(Of OEM.Pakowanie)(_unitOfWork)
        '    Dim pakowanieIdSpec As New IdSpecification(Of OEM.Pakowanie)(CType(dgvPozycjeZlecenia.SelectedRows(0).Tag, clsInhPozycjaZlecenia).PakowaniaId)
        '    Dim pakowanie As OEM.Pakowanie = pakowanieRepository.GetEntityMatching(pakowanieIdSpec)

        '    Dim swiadectwo As New OEM.Swiadectwo With {
        '        .DataWydruku = Now,
        '        .DataZamowienia = mvarZlecenie.DataZamowienia,
        '        .Gatunek = gatunek,
        '        .IloscSztuk = dgvInformacje.Rows.Count,
        '        .Klient = klient,
        '        .NormaWykonania = gatunek.NormaWykonania,
        '        .NrZamowieniaKlienta = mvarZlecenie.NumerZamowieniaKlienta,
        '        .NumerFaktury = "",
        '        .NumerZlecenia = mvarZlecenie.Numer,
        '        .PaczkaWysylki = paczkaWysylki,
        '        .Pakowanie = pakowanie,
        '        .TolDolna = Double.Parse(CType(dgvPozycjeZlecenia.SelectedRows(0).Tag, clsInhPozycjaZlecenia).TolDolna),
        '        .TolGorna = Double.Parse(CType(dgvPozycjeZlecenia.SelectedRows(0).Tag, clsInhPozycjaZlecenia).TolGorna),
        '        .Waga = wagaWybranychPozycji,
        '        .Wymiar = Double.Parse(CType(dgvPozycjeZlecenia.SelectedRows(0).Tag, clsInhPozycjaZlecenia).Wymiar)
        '    }


        '    If dgvInformacje.SelectedRows(0).Cells("colWytop").Value.ToString() <> String.Empty Then
        '        For Each row As DataGridViewRow In dgvInformacje.Rows
        '            If CBool(row.Cells("colWydruk").Value) Then

        '                Dim materialRepository As New Repository(Of OEM.Material)(_unitOfWork)
        '                Dim materialIdSpec As New IdSpecification(Of OEM.Material)(CType(row.Cells("colWytop").Tag, clsInhTrMaterialProdukcyjny).Material.Id)
        '                Dim material As OEM.Material = materialRepository.GetEntityMatching(materialIdSpec)

        '                For Each skladChemiczny As OEM.SkladChemiczny In material.SkladChemiczny
        '                    Dim swiadectwoSkladChemiczny As New OEM.SwiadectwoSkladChemiczny With {
        '                        .Pierwiastek = skladChemiczny.Sklad.Pierwiastek,
        '                        .Swiadectwo = swiadectwo,
        '                        .Wartosc = Double.Parse(skladChemiczny.Wartosc, CultureInfo.InvariantCulture)
        '                    }
        '                    swiadectwo.SkladChemiczny.Add(swiadectwoSkladChemiczny)

        '                Next
        '                Exit For
        '            End If
        '        Next
        '    End If


        '    For Each lvarRow As DataGridViewRow In dgvInformacje.Rows
        '        If CBool(lvarRow.Cells("colWydruk").Value) Then

        '            Dim drutRepository As New Repository(Of Tracking.Drut)(_unitOfWork)
        '            Dim drutIdSpec As New IdSpecification(Of Tracking.Drut)(CType(lvarRow.Tag, clsDrutWyslany).DrutId)
        '            Dim drut As Tracking.Drut = drutRepository.GetEntityMatching(drutIdSpec)


        '            Dim wlasciwosciMechaniczne As New OEM.WlasciwosciMechaniczne With {
        '                .Drut = drut,
        '                .Procent = Double.Parse(lvarRow.Cells("colZwickProcentWydluzenia").Value.ToString(), CultureInfo.InvariantCulture),
        '                .Sila = Double.Parse(lvarRow.Cells("colZwickSila").Value.ToString(), CultureInfo.InvariantCulture),
        '                .Swiadectwo = swiadectwo,
        '                .Wytrzymalosc = Double.Parse(lvarRow.Cells("colZwickWytrzymalosc").Value.ToString(), CultureInfo.InvariantCulture)
        '            }
        '            swiadectwo.Wytop = Replace(lvarRow.Cells("colWytop").Value.ToString(), ",", ".")
        '            swiadectwo.WlasciwosciMechaniczne.Add(wlasciwosciMechaniczne)
        '        End If
        '    Next

        '    _unitOfWork.BeginTransaction()
        '    Dim swiadectwoRepository As New Repository(Of OEM.Swiadectwo)(_unitOfWork)
        '    swiadectwoRepository.Add(swiadectwo)
        '    _unitOfWork.CommitTransaction()


        '    Dim swiadectwoPrinitngDialog As New SwiadectwoPrintingDialog(swiadectwo)
        '    swiadectwoPrinitngDialog.ShowDialog()


        'Catch ex As Exception
        '    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        'End Try

        Dim wagaWybranychPozycji As Double = 0
        For Each row As DataGridViewRow In dgvInformacje.Rows
            If row.Visible AndAlso row.Cells("colWydruk").Visible AndAlso CType(row.Cells("colWydruk").Value, Boolean) Then
                Dim wagaPozycji As Double

                If Double.TryParse(row.Cells("colIlosc").Value.ToString(), wagaPozycji) Then
                    wagaWybranychPozycji += wagaPozycji
                End If
            End If
        Next


        Dim lvarSwiadectwo As New clsInhSwiadectwo

        With lvarSwiadectwo
            .PaczkiWysylkiId = CType(dgvPaczkiWysylki.SelectedRows(0).Tag, clsInhPaczkiWysylki).Id
            .NumerZlecenia = mvarZlecenie.Numer
            .KlientId = mvarZlecenie.KlientID
            .Klient.NazwaSkrocona = mvarZlecenie.Klient.NazwaSkrocona
            .NrZamowieniaKlienta = mvarZlecenie.NumerZamowieniaKlienta
            .DataZamowienia = mvarZlecenie.DataZamowienia
            .GatunekId = CType(dgvPozycjeZlecenia.SelectedRows(0).Tag, clsInhPozycjaZlecenia).GatunekId
            .PakowanieId = CType(dgvPozycjeZlecenia.SelectedRows(0).Tag, clsInhPozycjaZlecenia).PakowaniaId
            .Wymiar = Replace(CType(dgvPozycjeZlecenia.SelectedRows(0).Tag, clsInhPozycjaZlecenia).Wymiar, ",", ".")
            .TolDolna = Replace(CType(dgvPozycjeZlecenia.SelectedRows(0).Tag, clsInhPozycjaZlecenia).TolDolna, ",", ".")
            .TolGorna = Replace(CType(dgvPozycjeZlecenia.SelectedRows(0).Tag, clsInhPozycjaZlecenia).TolGorna, ",", ".")
            .IloscSztuk = dgvInformacje.Rows.Count
            '.Waga = lblWagaDrutu.Text
            .Waga = wagaWybranychPozycji.ToString()
            .DataWydruku = Now
            .SkladChemiczny.Clear()
            If dgvInformacje.SelectedRows(0).Cells("colWytop").Value.ToString() <> String.Empty Then
                For Each lvarRow As DataGridViewRow In dgvInformacje.Rows
                    If CBool(lvarRow.Cells("colWydruk").Value) Then
                        For Each lvarTmp As clsInhSkladChemiczny In CType(lvarRow.Cells("colWytop").Tag, clsInhTrMaterialProdukcyjny).Material.SkladChemiczny
                            Dim lvarSklad As New clsInhSwiadectwoSkladChemiczny
                            With lvarSklad
                                .SwiadectwoId = lvarSwiadectwo.Id
                                .PierwiastekId = lvarTmp.Sklad.PierwiastekId
                                .Pierwiastek.Nazwa = lvarTmp.Sklad.Pierwiastek.Nazwa
                                .Wartosc = Replace(lvarTmp.Wartosc, ",", ".")
                            End With
                            .SkladChemiczny.Add(lvarSklad)
                        Next
                        Exit For
                    End If
                Next
            End If



            .WlasciwosciMechaniczne.Clear()
            For Each lvarRow As DataGridViewRow In dgvInformacje.Rows
                If CBool(lvarRow.Cells("colWydruk").Value) Then
                    Dim lvarWlasciwosci As New clsInhWlasciwosciMechaniczne
                    With lvarWlasciwosci
                        .SwiadectwoId = lvarSwiadectwo.Id.ToString()
                        .DrutId = CType(lvarRow.Tag, clsDrutWyslany).DrutId
                        .Sila = Replace(lvarRow.Cells("colZwickSila").Value.ToString(), ",", ".")
                        .Wytrzymalosc = Replace(lvarRow.Cells("colZwickWytrzymalosc").Value.ToString(), ",", ".")
                        .Procent = Replace(lvarRow.Cells("colZwickProcentWydluzenia").Value.ToString(), ",", ".")
                    End With
                    .WlasciwosciMechaniczne.Add(lvarWlasciwosci)
                    .Wytop = Replace(lvarRow.Cells("colWytop").Value.ToString(), ",", ".")
                    '.IloscSztuk = .IloscSztuk + 1
                    '.Waga = .Waga + CDbl(lvarRow.Cells("colIlosc").Value)
                End If
            Next

            '   .Save(mvarDbHolder)
        End With

        Dim lvarFrm As New frmSwiadectwo(lvarSwiadectwo)
        With lvarFrm
            .MdiParent = MdiParent
            .Show()
        End With

    End Sub

    Private Sub cmdPokaz_Click(sender As Object, e As EventArgs) Handles cmdPokaz.Click
        Dim lvarFrm As New frmSwiadectwoSzukaj(CType(dgvPaczkiWysylki.SelectedRows(0).Tag, clsInhPaczkiWysylki).Id)
        With lvarFrm
            .MdiParent = mdiMain.ActiveForm
            .Show()
        End With
    End Sub


    Private Sub btnPrintInvoice_Click(sender As System.Object, e As System.EventArgs) Handles btnPrintInvoice.Click
        Try
            If dgvWysylki.SelectedRows.Count = 0 Then
                Throw New Exception("Proszę wybrać pozycję zlecenia")
            End If

            Using unitOfWork As New UnitOfWork
                Cursor = Cursors.WaitCursor

                Dim wysylkaRepository As New Repository(Of OEM.Wysylka)(unitOfWork)
                Dim wysylkaIdSpecification As New IdSpecification(Of OEM.Wysylka)(CType(dgvWysylki.SelectedRows(0).Tag, clsInhWysylka).ID)
                Dim selectedWysylka As OEM.Wysylka = wysylkaRepository.GetEntityMatching(wysylkaIdSpecification)

                Dim fakturaReportService As New FakturaReportService()
                Dim fakturaReport As FakturaReport = fakturaReportService.GenerateReport(selectedWysylka)

                If fakturaReport IsNot Nothing Then
                    Dim printViewer As frmPrintViewer = New frmPrintViewer(fakturaReport, False)
                    printViewer.WindowState = FormWindowState.Maximized
                    printViewer.ShowDialog()
                End If
            End Using
            
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Finally
            Cursor = Cursors.Default
        End Try
    End Sub

    Private Sub btn_ChangeShipmentDate_Click(sender As System.Object, e As System.EventArgs) Handles btn_ChangeShipmentDate.Click

        Try
            If dgvWysylki.SelectedRows.Count = 0 Then
                Throw New Exception("Proszę, wybierz wysyłkę, aby kontynuować.")
            End If

            Dim x As clsInhWysylka = CType(dgvWysylki.SelectedRows(0).Tag, clsInhWysylka)

            Dim wysylkaId As Integer = CType(dgvWysylki.SelectedRows(0).Tag, clsInhWysylka).ID
            Dim wysylkaIdSpecification As New IdSpecification(Of OEM.Wysylka)(wysylkaId)
            Dim wysylkaRepository As New Repository(Of OEM.Wysylka)(_unitOfWork)
            Dim wysylka As OEM.Wysylka = wysylkaRepository.GetEntityMatching(wysylkaIdSpecification)

            Dim wysylkaDataDialog As New frmWysylkaData(wysylka.Data)
            If wysylkaDataDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
                Cursor = Cursors.WaitCursor
                wysylka.Data = wysylkaDataDialog.DateValue
                _unitOfWork.BeginTransaction()
                wysylkaRepository.Update(wysylka)
                _unitOfWork.CommitTransaction()

                Dim zlecenieIdSpecification As New IdSpecification(Of OEM.Zlecenie)(mvarZlecenie.ID)
                Dim zlecenieRepository As New Repository(Of OEM.Zlecenie)(_unitOfWork)
                Dim zlecenie As OEM.Zlecenie = zlecenieRepository.GetEntityMatching(zlecenieIdSpecification)

                dgvWysylki.Rows.Clear()
                Dim counter As Integer = 0
                For Each w As OEM.Wysylka In zlecenie.Wysylki
                    counter += 1
                    Dim rowIndex As Integer = dgvWysylki.Rows.Add(counter, w.Numer, w.Data.ToShortDateString(), w.Pracownik.Nazwisko)
                    Dim wysylkaGosi As New clsInhWysylka(w.Id, mvarDbHolder)
                    dgvWysylki.Rows(rowIndex).Tag = wysylkaGosi
                Next

            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            Cursor = Cursors.Default
        End Try
    End Sub
End Class